package 笔试.中通.旋转矩阵;

import java.util.Arrays;

/**
 * 对于旋转后的位置 (x, y)，其对应的原始位置 (i, j) 的计算方式为：
 * x 坐标（行号）：旋转后的位置的行号等于原始位置的列号，即 x = j。
 * y 坐标（列号）：旋转后的位置的列号等于原始位置的行号与 n（矩阵大小）的差值减一，即 y = n - i - 1。
 * 故旋转后位置坐标为：(x, y) = (j, n - i - 1)。
 * 在进行旋转时，需要创建一个临时矩阵 tmpMatrix 来保存旋转后的结果，防止旋转操作影响到当前正在进行的操作。
 */
public class Solution {
    public static int[][] solution(int[][] matrix, int times) {
        int n = matrix.length;
        int[][] tmpMatrix = new int[n][n];

        //执行逆时针旋转
        for (int t = 0; t < times; t++) {//旋转次数
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    tmpMatrix[n - j - 1][i] = matrix[i][j];   //坐标转换
                }
            }
            //将旋转后的矩阵作为下一次旋转的输入
            matrix = tmpMatrix;
            tmpMatrix = new int[n][n];    //重置旋转后的矩阵
        }

        return matrix;
    }

    public static void main(String[] args) {
        int[][] matrix = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
        int times = 1;
        int[][] arr = solution(matrix, times);
        Arrays.stream(arr).forEach(x -> {
            System.out.println(Arrays.toString(x));
        });

    }
}
